Logical shift

Logical shift operators in various programming languages
Language Left Right
C/C++/Go (unsigned types only) << >>
Object Pascal/Delphi shl shr
Java, JavaScript, D << >>>
Ocaml lsl lsr
Standard ML << >>
Verilog << >>
VHDL sll srl
Fortran LSHIFT RSHIFT
x86 Assembly SHL SHR

In computer science, a logical shift is a bitwise operation that shifts all the bits of its operand. Unlike an arithmetic shift, a logical shift does not preserve a number's sign bit or distinguish a number's exponent from its mantissa; every bit in the operand is simply moved a given number of bit positions, and the vacant bit-positions are filled in, generally with zeros (compare with a circular shift).

A logical shift is often used when its operand is being treated as a sequence of bits rather than as a number.

Logical shifts can be useful as efficient ways of performing multiplication or division of unsigned integers by powers of two. Shifting left by n bits on a signed or unsigned binary number has the effect of multiplying it by 2n. Shifting right by n bits on an unsigned binary number has the effect of dividing it by 2n (rounding towards 0).

Because arithmetic right shift differs from logical right shift, many languages have different operators for them. For example, in Java and JavaScript, the arithmetic right shift operator is >>; whereas the logical right shift operator is >>>. (Java only has one left shift operator (<<), because arithmetic left shift and logical left shift have the same effect.)

The C, C++, and Go programming languages, however, have only one right shift operator, >>. Most C and C++ implementations, as well as the Go language, choose which right shift to perform depending on what type of integer is being shifted -- signed integers are shifted using the arithmetic shift, and unsigned integers are shifted using the logical shift.

Example

If the bit sequence 0001 0111 (decimal 23) were subjected to a logical shift of one bit position... (please refer to images below)